package com.sourcetrip.my.inter;


import com.sourcetrip.utils.MapVisitor;
import com.sourcetrip.utils.printer.BinaryTreeInfo;

/**
 * @author: ZhouBert
 * @date: 2020/12/23
 * @description:	映射（Map/Dictionary）
 */
public interface Map<K,V> extends BinaryTreeInfo {

	/**
	 * 映射的容量
	 * @return
	 */
	int size();

	/**
	 * 映射是否为空
	 * @return
	 */
	boolean isEmpty();

	/**
	 * 清空 映射
	 */
	void clear();

	/**
	 * 往映射里放入键值对
	 * @param key
	 * @param value
	 * @return
	 */
	V put(K key, V value);

	/**
	 * 根据 key 获取值
	 * @param key
	 * @return
	 */
	V get(K key);

	/**
	 * 根据 key 移除 值并返回
	 * @param key
	 * @return value
	 */
	V remove(K key);

	/**
	 * 判断映射里是否包含 key
	 * @param key
	 * @return
	 */
	boolean containsKey(K key);

	/**
	 * 判断映射里是否包含 value (一般还是上个方法用的多)
	 * @param value
	 * @return
	 */
	boolean containsValue(V value);

	/**
	 * 用 visitor 接口遍历 映射
	 * @param visitor
	 */
	void traversal(MapVisitor<K, V> visitor);

}
